/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package test_tim;

import java.util.ArrayList;
import java.util.Arrays;

/**
 *
 * @author timbeer
 */
public class Spieler {
    
    private String name = "";
    private boolean istAktiv = false;
    private int id;
    ArrayList <Farbkarte> aufgenommeneKarten = new ArrayList <Farbkarte> ();
    static int counter = 0;
 
    
//    public Spieler(String name, boolean istAktiv, int id) {
//        this.name = name;
//        this.istAktiv = istAktiv;
//        this.id = id;
//    }
    
    public Spieler(String name) {
        this.name = name;
        this.istAktiv = false;
        this.id = counter;
        counter++;
    }    
    
    // leerer Konstruktor
//        public Spieler() {
//        name = "";
//        istAktiv = false;
//        id = 0;
//    }

    // Karte zur ArrayList aufgenommeneKarten hinzufügen
    public void karteAufnehmen(Farbkarte k) {
        aufgenommeneKarten.add(k);
    }
    
    // Aufgenommens ReihenArray zur ArrayList hinzufügen
    public void reiheAufnehmen(ArrayList<Farbkarte> kartenReihe){
        aufgenommeneKarten.addAll(kartenReihe);
    }
    
    // Methode um die Punkte zu zählen. Dabei wird die ArrayList aufgenommeneKarten benutzt
    public int punkteZählen(){
        
        //Zählervariablen, welche um +1 erhöht werden, wenn entsprechende Farbe in aufgenommeneKarten vorhanden
        int magenta = 0;
        int orange = 0;
        int blau = 0;
        int braun = 0;
        int gelb = 0;
        int grau = 0;
        int gruen = 0;
        
        //Länge der List aufgenommeneKarten
        int i = aufgenommeneKarten.size();
        
        //for-Schleife, welche so oft durchlaufen wird wie Karten vorhanden
        //mit if/else if  wird Farbe der Karte abgefragt und die entsprechende Variable um +1 erhöht
        for(int a = 0; a < i; a++){
            Farbkarte tmp = aufgenommeneKarten.get(a);
            
            //IDE hat Methode equals() vorgeschlagen
            // vorher:  if(tmp.getFarbe()=="magenta")
            if("magenta".equals(tmp.getFarbe())){
                magenta++;
            }else if("orange".equals(tmp.getFarbe())){
                orange++;
            }else if("blau".equals(tmp.getFarbe())){
                blau++;
            }else if("braun".equals(tmp.getFarbe())){
                braun++;
            }else if("gelb".equals(tmp.getFarbe())){
                gelb++;
            }else if("grau".equals(tmp.getFarbe())){
                grau++;
            }else if("gruen".equals(tmp.getFarbe())){
                gruen++;
            }else
                System.out.println("Fehler aufgetreten!");
        }
        
        //Die Variablen, welche jeweils die Anzahl Karten pro Farbe wiederspiegeln, werden in ein Array übergeben
        int [] AnzahlKarten = new int [7];
        AnzahlKarten[0] = magenta;
        AnzahlKarten[1] = orange;
        AnzahlKarten[2] = blau;
        AnzahlKarten[3] = braun;
        AnzahlKarten[4] = gelb;
        AnzahlKarten[5] = grau;
        AnzahlKarten[6] = gruen;
        
        //Im Array werden die Zahlen mit der Methode sort() der Reihe nach geordnet (aufsteigend)
        Arrays.sort(AnzahlKarten);
        
        //Variablen für Addition und Subtraktion der Punkte
        int pluspunkte = 0;
        int minuspunkte = 0;
        
        
        //Berechnung Pluspunkte
        //Die letzten drei Stellen des Arrays werden geprüft. 
        //Dort sind die drei höchsten Zahlen zu finden, weil aufsteigend sortiert.
        for(int x = 6; x >= 4; x--){
            if(AnzahlKarten[x]>= 6){
                pluspunkte = pluspunkte + 21;
            }else if(AnzahlKarten[x]==5){
                pluspunkte = pluspunkte + 15;
            }else if(AnzahlKarten[x]==4){
                pluspunkte = pluspunkte + 10;
            }else if(AnzahlKarten[x]==3){
                pluspunkte = pluspunkte + 6;
            }else if(AnzahlKarten[x]==2){
                pluspunkte = pluspunkte + 3;
            }else if(AnzahlKarten[x]==1){
                pluspunkte = pluspunkte + 1;
            }else if(AnzahlKarten[x]==0){
                pluspunkte = pluspunkte;
            }else
                System.out.println("Es ist ein Fehler aufgetreten!");;
        }
        
        //Berechnung Minuspunkte
         for(int y = 3; y >= 0; y--){
            if(AnzahlKarten[y]>= 6){
                minuspunkte = minuspunkte - 21;
            }else if(AnzahlKarten[y]==5){
                minuspunkte = minuspunkte - 15;
            }else if(AnzahlKarten[y]==4){
                minuspunkte = minuspunkte - 10;
            }else if(AnzahlKarten[y]==3){
                minuspunkte = minuspunkte - 6;
            }else if(AnzahlKarten[y]==2){
                minuspunkte = minuspunkte - 3;
            }else if(AnzahlKarten[y]==1){
                minuspunkte = minuspunkte - 1;
            }else if(AnzahlKarten[y]==0){
                minuspunkte = minuspunkte;
            }else
                System.out.println("Es ist ein Fehler aufgetreten!");;
        }
        
        int punktetotal = pluspunkte + minuspunkte;
        
        
        return punktetotal;
    }
    
    
     // Methode um die Anzahl aufgenommener Karten der entsprechenden Farbe zurückzugeben
    public int getAnzahlMagenta(){
        
        //Zählervariablen, welche um +1 erhöht werden, wenn entsprechende Farbe in aufgenommeneKarten vorhanden
        int anzahl = 0;
        
        
        //Länge der List aufgenommeneKarten
        int i = aufgenommeneKarten.size();
        
        //for-Schleife, welche so oft durchlaufen wird wie Karten vorhanden
        //Das Array aufgenommeneKarten wird durchlaufen und wenn das Objekt Karte die entsprechende Farbe hat wird der Zähler um +1 erhöht
        for(int a = 0; a < i; a++){
            Farbkarte tmp = aufgenommeneKarten.get(a);
            
            //IDE hat Methode equals() vorgeschlagen
            // vorher:  if(tmp.getFarbe()=="magenta")
            if("magenta".equals(tmp.getFarbe())){
                anzahl++;
           
            }else
                System.out.println("Fehler aufgetreten!");  
        }
        
        return anzahl;
    }

    
        // Methode um die Anzahl aufgenommener Karten der entsprechenden Farbe zurückzugeben
    public int getAnzahlOrange(){
        
        //Zählervariablen, welche um +1 erhöht werden, wenn entsprechende Farbe in aufgenommeneKarten vorhanden
        int anzahl = 0;
        
        
        //Länge der List aufgenommeneKarten
        int i = aufgenommeneKarten.size();
        
        //for-Schleife, welche so oft durchlaufen wird wie Karten vorhanden
        //Das Array aufgenommeneKarten wird durchlaufen und wenn das Objekt Karte die entsprechende Farbe hat wird der Zähler um +1 erhöht
        for(int a = 0; a < i; a++){
            Farbkarte tmp = aufgenommeneKarten.get(a);
            
            //IDE hat Methode equals() vorgeschlagen
            // vorher:  if(tmp.getFarbe()=="magenta")
            if("orange".equals(tmp.getFarbe())){
                anzahl++;
           
            }else
                System.out.println("Fehler aufgetreten!");  
        }
        
        return anzahl;
    }

    
        // Methode um die Anzahl aufgenommener Karten der entsprechenden Farbe zurückzugeben
    public int getAnzahlBlau(){
        
        //Zählervariablen, welche um +1 erhöht werden, wenn entsprechende Farbe in aufgenommeneKarten vorhanden
        int anzahl = 0;
        
        
        //Länge der List aufgenommeneKarten
        int i = aufgenommeneKarten.size();
        
        //for-Schleife, welche so oft durchlaufen wird wie Karten vorhanden
        //Das Array aufgenommeneKarten wird durchlaufen und wenn das Objekt Karte die entsprechende Farbe hat wird der Zähler um +1 erhöht
        for(int a = 0; a < i; a++){
            Farbkarte tmp = aufgenommeneKarten.get(a);
            
            //IDE hat Methode equals() vorgeschlagen
            // vorher:  if(tmp.getFarbe()=="magenta")
            if("blau".equals(tmp.getFarbe())){
                anzahl++;
           
            }else
                System.out.println("Fehler aufgetreten!");  
        }
        
        return anzahl;
    }

    
        // Methode um die Anzahl aufgenommener Karten der entsprechenden Farbe zurückzugeben
    public int getAnzahlBraun(){
        
        //Zählervariablen, welche um +1 erhöht werden, wenn entsprechende Farbe in aufgenommeneKarten vorhanden
        int anzahl = 0;
        
        
        //Länge der List aufgenommeneKarten
        int i = aufgenommeneKarten.size();
        
        //for-Schleife, welche so oft durchlaufen wird wie Karten vorhanden
        //Das Array aufgenommeneKarten wird durchlaufen und wenn das Objekt Karte die entsprechende Farbe hat wird der Zähler um +1 erhöht
        for(int a = 0; a < i; a++){
            Farbkarte tmp = aufgenommeneKarten.get(a);
            
            //IDE hat Methode equals() vorgeschlagen
            // vorher:  if(tmp.getFarbe()=="magenta")
            if("braun".equals(tmp.getFarbe())){
                anzahl++;
           
            }else
                System.out.println("Fehler aufgetreten!");  
        }
        
        return anzahl;
    }

    
        // Methode um die Anzahl aufgenommener Karten der entsprechenden Farbe zurückzugeben
    public int getAnzahlGelb(){
        
        //Zählervariablen, welche um +1 erhöht werden, wenn entsprechende Farbe in aufgenommeneKarten vorhanden
        int anzahl = 0;
        
        
        //Länge der List aufgenommeneKarten
        int i = aufgenommeneKarten.size();
        
        //for-Schleife, welche so oft durchlaufen wird wie Karten vorhanden
        //Das Array aufgenommeneKarten wird durchlaufen und wenn das Objekt Karte die entsprechende Farbe hat wird der Zähler um +1 erhöht
        for(int a = 0; a < i; a++){
            Farbkarte tmp = aufgenommeneKarten.get(a);
            
            //IDE hat Methode equals() vorgeschlagen
            // vorher:  if(tmp.getFarbe()=="magenta")
            if("gelb".equals(tmp.getFarbe())){
                anzahl++;
           
            }else
                System.out.println("Fehler aufgetreten!");  
        }
        
        return anzahl;
    }

    
        // Methode um die Anzahl aufgenommener Karten der entsprechenden Farbe zurückzugeben
    public int getAnzahlGrau(){
        
        //Zählervariablen, welche um +1 erhöht werden, wenn entsprechende Farbe in aufgenommeneKarten vorhanden
        int anzahl = 0;
        
        
        //Länge der List aufgenommeneKarten
        int i = aufgenommeneKarten.size();
        
        //for-Schleife, welche so oft durchlaufen wird wie Karten vorhanden
        //Das Array aufgenommeneKarten wird durchlaufen und wenn das Objekt Karte die entsprechende Farbe hat wird der Zähler um +1 erhöht
        for(int a = 0; a < i; a++){
            Farbkarte tmp = aufgenommeneKarten.get(a);
            
            //IDE hat Methode equals() vorgeschlagen
            // vorher:  if(tmp.getFarbe()=="magenta")
            if("grau".equals(tmp.getFarbe())){
                anzahl++;
           
            }else
                System.out.println("Fehler aufgetreten!");  
        }
        
        return anzahl;
    }

    
        // Methode um die Anzahl aufgenommener Karten der entsprechenden Farbe zurückzugeben
    public int getAnzahlGruen(){
        
        //Zählervariablen, welche um +1 erhöht werden, wenn entsprechende Farbe in aufgenommeneKarten vorhanden
        int anzahl = 0;
        
        
        //Länge der List aufgenommeneKarten
        int i = aufgenommeneKarten.size();
        
        //for-Schleife, welche so oft durchlaufen wird wie Karten vorhanden
        //Das Array aufgenommeneKarten wird durchlaufen und wenn das Objekt Karte die entsprechende Farbe hat wird der Zähler um +1 erhöht
        for(int a = 0; a < i; a++){
            Farbkarte tmp = aufgenommeneKarten.get(a);
            
            //IDE hat Methode equals() vorgeschlagen
            // vorher:  if(tmp.getFarbe()=="magenta")
            if("gruen".equals(tmp.getFarbe())){
                anzahl++;
           
            }else
                System.out.println("Fehler aufgetreten!");  
        }
        
        return anzahl;
    }

    /**
     * @return the name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return the istAktiv
     */
    public boolean IstAktiv() {
        return istAktiv;
    }

    /**
     * @param istAktiv the istAktiv to set
     */
    public void setIstAktiv(boolean istAktiv) {
        this.istAktiv = istAktiv;
    }

    /**
     * @return the id
     */
    public int getId() {
        return id;
    }

    /**
     * @param id the id to set
     */
    public void setId(int id) {
        this.id = id;
    }
    

    
}
